package com.servitware.cardio.domain;

import java.io.Serializable;
import java.util.Date;

import com.servitware.cardio.domain.transport.SolicitudTx;
import com.servitware.core.id.base.IntIded;
import com.servitware.core.id.base.InvalidIdException;

public class Solicitud extends IntIded implements Serializable
{
	private static final long serialVersionUID = 93114829436844797L;

	private Holter holter;
	private String motivosPrueba;
	private Date fecha;
	private Date fechaPrueba;
	private Date horaPrueba;
	
	/*
	 * para reservar el cacharro
	 */
	private float duracion;
	private int status;

	private Medico medico = null;
	private Sesion sesion = null;
	private ClienteIndirecto cliente = null;
	private Centro centro = null;
	private ClienteDirectoUsuario usuario=null;
	private Informe informe = null;

	public Solicitud()
	{
		super();
	}

	public Solicitud(int id) throws InvalidIdException
	{
		super(id);
	}

	public Solicitud(int id, Sesion ss, ClienteIndirecto cl, Centro ct, ClienteDirectoUsuario u) throws InvalidIdException
	{
		this(id);

		sesion = ss;
		cliente = cl;
		centro = ct;
		usuario=u;
	}

	/**
	 * @param id
	 * @param holter
	 * @param motivosPrueba
	 * @param fecha
	 * @param fechaPrueba
	 * @param horaPrueba
	 * @param duracion
	 * @param status
	 * @param sesion
	 * @param cliente
	 * @param centro
	 * @param vendedor
	 * @throws InvalidIdException
	 */
	public Solicitud(int id, String motivosPrueba, Date fecha, Date fechaPrueba, Date horaPrueba, int duracion, int sesion,
			int cliente, int usuario) throws InvalidIdException
	{
		this(id);

		this.motivosPrueba = motivosPrueba;
		this.fecha = fecha;
		this.fechaPrueba = fechaPrueba;
		this.horaPrueba = horaPrueba;
		this.duracion = duracion;

		this.sesion = new Sesion();
		this.sesion.setId(sesion);

		this.cliente = new ClienteIndirecto();
		this.cliente.setId(cliente);
	}

	/**
	 * @param id
	 * @param holter
	 * @param motivosPrueba
	 * @param fecha
	 * @param fechaPrueba
	 * @param horaPrueba
	 * @param duracion
	 * @param status
	 * @throws InvalidIdException
	 */
	public Solicitud(int id, String motivosPrueba, Date fecha, Date fechaPrueba, Date horaPrueba, int duracion, int status)
			throws InvalidIdException
	{
		this(id);

		this.motivosPrueba = motivosPrueba;
		this.fecha = fecha;
		this.fechaPrueba = fechaPrueba;
		this.horaPrueba = horaPrueba;
		this.duracion = duracion;
		this.status = status;
	}


	/*
	 * ------------------------------------------------- 
	 * NO TOCAR -- No es generado
	 * -------------------------------------------------
	 */
	/**
	 * Genera objeto de transporte para webs service RESTful/JSON
	 * 
	 * @return version SexionTx de Sesion
	 */
	public SolicitudTx getSolicitudTx()
	{
		SolicitudTx stx = new SolicitudTx(getId());

		stx.setCentro(getCentro().getName());
		stx.setClienteTx(getCliente().getClienteTx());
		stx.setHolter(getHolter());
		stx.setMotivosPrueba(getMotivosPrueba());
		stx.setSesionTx(getSesion().getSesionTx());

		return stx;
	}


	/*
	 * --------------------------------------------------------------------------
	 * ------------------------------ fin codigo no generado
	 * --------------------
	 * ------------------------------------------------------
	 * ------------------------------ getters & setters
	 * --------------------------
	 * ------------------------------------------------
	 * ------------------------------
	 */

	@Override
	public int hashCode()
	{
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result + ((centro == null) ? 0 : centro.hashCode());
		result = prime * result + ((cliente == null) ? 0 : cliente.hashCode());
		result = prime * result + Float.floatToIntBits(duracion);
		result = prime * result + ((fechaPrueba == null) ? 0 : fechaPrueba.hashCode());
		result = prime * result + ((horaPrueba == null) ? 0 : horaPrueba.hashCode());
		result = prime * result + ((motivosPrueba == null) ? 0 : motivosPrueba.hashCode());
		result = prime * result + status;
		result = prime * result + ((usuario == null) ? 0 : usuario.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj)
	{
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		Solicitud other = (Solicitud) obj;
		if (centro == null)
		{
			if (other.centro != null)
				return false;
		}
		else if (!centro.equals(other.centro))
			return false;
		if (cliente == null)
		{
			if (other.cliente != null)
				return false;
		}
		else if (!cliente.equals(other.cliente))
			return false;
		if (Float.floatToIntBits(duracion) != Float.floatToIntBits(other.duracion))
			return false;
		if (fechaPrueba == null)
		{
			if (other.fechaPrueba != null)
				return false;
		}
		else if (!fechaPrueba.equals(other.fechaPrueba))
			return false;
		if (horaPrueba == null)
		{
			if (other.horaPrueba != null)
				return false;
		}
		else if (!horaPrueba.equals(other.horaPrueba))
			return false;
		if (motivosPrueba == null)
		{
			if (other.motivosPrueba != null)
				return false;
		}
		else if (!motivosPrueba.equals(other.motivosPrueba))
			return false;
		if (status != other.status)
			return false;
		if (usuario == null)
		{
			if (other.usuario != null)
				return false;
		}
		else if (!usuario.equals(other.usuario))
			return false;
		return true;
	}

	public Holter getHolter()
	{
		return holter;
	}

	public void setHolter(Holter holter)
	{
		this.holter = holter;
	}

	public String getMotivosPrueba()
	{
		return motivosPrueba;
	}

	public void setMotivosPrueba(String motivosPrueba)
	{
		this.motivosPrueba = motivosPrueba;
	}

	public Date getFecha()
	{
		return fecha;
	}

	public void setFecha(Date fecha)
	{
		this.fecha = fecha;
	}

	public Date getFechaPrueba()
	{
		return fechaPrueba;
	}

	public void setFechaPrueba(Date fechaPrueba)
	{
		this.fechaPrueba = fechaPrueba;
	}

	public Date getHoraPrueba()
	{
		return horaPrueba;
	}

	public void setHoraPrueba(Date horaPrueba)
	{
		this.horaPrueba = horaPrueba;
	}

	public float getDuracion()
	{
		return duracion;
	}

	public void setDuracion(float duracion)
	{
		this.duracion = duracion;
	}

	public int getStatus()
	{
		return status;
	}

	public void setStatus(int status)
	{
		this.status = status;
	}


	public void setMedico(Medico medico)
	{
		this.medico = medico;
	}

	public Sesion getSesion()
	{
		return sesion;
	}

	public void setSesion(Sesion sesion)
	{
		this.sesion = sesion;
	}

	public ClienteIndirecto getCliente()
	{
		return cliente;
	}

	public void setCliente(ClienteIndirecto cliente)
	{
		this.cliente = cliente;
	}

	public Centro getCentro()
	{
		return centro;
	}

	public void setCentro(Centro centro)
	{
		this.centro = centro;
	}

	public Informe getInforme()
	{
		return informe;
	}

	public void setInforme(Informe informe)
	{
		this.informe = informe;
	}

	public ClienteDirectoUsuario getUsuario()
	{
		return usuario;
	}

	public void setUsuario(ClienteDirectoUsuario usuario)
	{
		this.usuario = usuario;
	}

	public Medico getMedico()
	{
		return medico;
	}


	
}
